mfa.tsx 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. import { PermissionAction } from '@supabase/shared-types/out/constants'
  2. import { useParams } from 'common'
  3. import { PageContainer } from 'ui-patterns/PageContainer'
  4. import {
  5. PageHeader,
  6. PageHeaderDescription,
  7. PageHeaderMeta,
  8. PageHeaderSummary,
  9. PageHeaderTitle,
  10. } from 'ui-patterns/PageHeader'
  11. import { PageSection, PageSectionContent } from 'ui-patterns/PageSection'
  12. import { GenericSkeletonLoader } from 'ui-patterns/ShimmeringLoader'
  13. import { MfaAuthSettingsForm } from '@/components/interfaces/Auth/MfaAuthSettingsForm/MfaAuthSettingsForm'
  14. import AuthLayout from '@/components/layouts/AuthLayout/AuthLayout'
  15. import DefaultLayout from '@/components/layouts/DefaultLayout'
  16. import NoPermission from '@/components/ui/NoPermission'
  17. import { UnknownInterface } from '@/components/ui/UnknownInterface'
  18. import { useAsyncCheckPermissions } from '@/hooks/misc/useCheckPermissions'
  19. import { useIsFeatureEnabled } from '@/hooks/misc/useIsFeatureEnabled'
  20. import type { NextPageWithLayout } from '@/types'
  21. const MfaPage: NextPageWithLayout = () => {
  22. const { ref } = useParams()
  23. const showMFA = useIsFeatureEnabled('authentication:multi_factor')
  24. const { can: canReadAuthSettings, isSuccess: isPermissionsLoaded } = useAsyncCheckPermissions(
  25. PermissionAction.READ,
  26. 'custom_config_gotrue'
  27. )
  28. if (!showMFA) {
  29. return <UnknownInterface urlBack={`/project/${ref}/auth/users`} />
  30. }
  31. if (isPermissionsLoaded && !canReadAuthSettings) {
  32. return <NoPermission isFullPage resourceText="access your project's authentication settings" />
  33. }
  34. return (
  35. <>
  36. <PageHeader size="default">
  37. <PageHeaderMeta>
  38. <PageHeaderSummary>
  39. <PageHeaderTitle>Multi-Factor Authentication (MFA)</PageHeaderTitle>
  40. <PageHeaderDescription>
  41. Requires users to provide additional verification factors to authenticate
  42. </PageHeaderDescription>
  43. </PageHeaderSummary>
  44. </PageHeaderMeta>
  45. </PageHeader>
  46. <PageContainer size="default">
  47. {!isPermissionsLoaded ? (
  48. <PageSection>
  49. <PageSectionContent>
  50. <GenericSkeletonLoader />
  51. </PageSectionContent>
  52. </PageSection>
  53. ) : (
  54. <MfaAuthSettingsForm />
  55. )}
  56. </PageContainer>
  57. </>
  58. )
  59. }
  60. MfaPage.getLayout = (page) => (
  61. <DefaultLayout>
  62. <AuthLayout title="Multi-Factor">{page}</AuthLayout>
  63. </DefaultLayout>
  64. )
  65. export default MfaPage